/*
package GeneracionCodigo;

import PolacaInversa.Pila;
import Mensajes.Mensaje;
import TablaDeSimbolos.ElementoTS;
import TablaDeSimbolos.TSimbolo;
import TokensDelLenguaje.Token;
import TokensDelLenguaje.Token_Ulongint;
import TokensDelLenguaje.Tokens;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Observable;

public class Generador extends Observable{
    
    private List<Token> polaca;
    private Pila pila;
    
    private TSimbolo ts;
    
    private static int L = 0;
    private static int O = 1;
    
    private int al, bl, cl, dl, ah, bh, ch, dh, ax, ex, bx, cx, dx, eax, ebx, ecx, edx;
    //private String[] nombres = new nombres[]{"","","",""};
    
    
    public Generador(TSimbolo ts){
        this.polaca = new ArrayList<Token>();
        pila = new Pila();
        this.ts = ts;
    }
    
    public Generador(TSimbolo ts, List<Token> polaca){
        this.polaca = polaca;
        pila = new Pila();
        this.ts = ts;
    }
    
    public void generarCodigo(){
        colocarEncabezado();
        for(int i=0; i<polaca.size(); i++){
            Token t = polaca.get(i);
            if (t.getId() == Tokens.var){
                pila.apilar(t);
            }
            else if (t.getId() == Tokens.const_ulongint){
                pila.apilar(t);
            }
            else if (t.getId() == Tokens.const_uinteger){
                pila.apilar(t);
            }
            else if (t.getId() == Tokens.rsv_if){
            }
            else if (t.getId() == Tokens.rsv_then){
            }
            else if (t.getId() == Tokens.rsv_else){
            }
            else if (t.getId() == Tokens.rsv_for){
            }
            else if (t.getId() == Tokens.rsv_print){
            }
            else if (t.getId() == Tokens.rsv_struct){
            }
            else if (t.getId() == Tokens.rsv_begin){
            }
            else if (t.getId() == Tokens.rsv_end){
            }
            else if (t.getId() == Tokens.rsv_ulongint){
            }
            else if (t.getId() == Tokens.rsv_uinteger){
            }
            else if (t.getId() == Tokens.suma){
                Token o1 = (Token) pila.desapilar();
                Token o2 = (Token) pila.desapilar();
                pila.apilar(new Token_Ulongint(o1.getLong()+o2.getLong()));
                //int reg = this.getRegistroLibre()+1;
                if(o1.getId() == Tokens.const_uinteger && o1.getId() == Tokens.const_uinteger){
                    String m = "MOV al, "+o2.getLong()+"\n";
                    m += "ADD al, "+o1.getLong()+"\n";
                    this.mostar_mensaje(m);
                }
            }
            else if (t.getId() == Tokens.resta){
            }
            else if (t.getId() == Tokens.asterisco){
            }
            else if (t.getId() == Tokens.division){
            }
            else if (t.getId() == Tokens.asignacion){
                Token o1 = (Token) pila.desapilar();
                Token o2 = (Token) pila.desapilar();
                //int reg = this.getRegistroLibre()+1;
                String m = "MOV "+o1.getCadena()+", "+o2.getLong()+"\n";
                
                this.mostar_mensaje(m);
            }
            else if (t.getId() == Tokens.mayor){
            }
            else if (t.getId() == Tokens.mayor_igual){
            }
            else if (t.getId() == Tokens.menor){
            }
            else if (t.getId() == Tokens.menor_igual){
            }
            else if (t.getId() == Tokens.igual){
            }
            else if (t.getId() == Tokens.distinto){
            }
            else if (t.getId() == Tokens.llave_abre){
            }
            else if (t.getId() == Tokens.parentesis_abre){
            }
            else if (t.getId() == Tokens.llave_cierra){
            }
            else if (t.getId() == Tokens.parentesis_cierra){
            }
            else if (t.getId() == Tokens.coma){
            }
            else if (t.getId() == Tokens.punto_y_coma){
            }
            else if (t.getId() == Tokens.punto){
            }
            else if (t.getId() == Tokens.dos_puntos){
            }
            else if (t.getId() == Tokens.cadena){
            }
        }
        String m = "end start";
        this.mostar_mensaje(m);
    }

    private void colocarEncabezado() {
        String encabezado = ".386\n";
        encabezado += ".model small, stdcall\n";
        encabezado += "option casemap :none\n";
        encabezado += "include \\masm32\\include\\windows.inc\n";
        encabezado += "include \\masm32\\include\\kernel32.inc\n";
        encabezado += "include \\masm32\\include\\user32.inc\n";
        encabezado += "includelib \\masm32\\lib\\kernel32.lib\n";
        encabezado += "includelib \\masm32\\lib\\user32.lib\n";
        encabezado += ".stack 200\n";
        encabezado += ".code\n";
        encabezado += "start: \n";
        Collection<ElementoTS> c = ts.values();
        for(Iterator<ElementoTS> it = c.iterator(); it.hasNext();){
            Token t = it.next().getToken();
            if(t.getId() == Tokens.var){
                int i = ts.get(t).getTipo();
                if(ts.get(t).getTipo() == ElementoTS.UINTEGER)
                    encabezado += t.getCadena()+" DB ?";
                else
                    if(ts.get(t).getTipo() == ElementoTS.ULONGINT)
                        encabezado += t.getCadena()+" DW ?";
                    else
                        if(ts.get(t).getTipo() == ElementoTS.CADENA)
                            encabezado += t.getCadena()+" DS 255";
            }
        }
        this.mostar_mensaje(encabezado);
    }
    
    /*public int getRegistroLibre(){
        for(int i=0; i<this.registros.length; i++){
            if(registros[i] == this.LIBRE)
                return i;
        }
        return 0;
    }
    
    public void mostar_mensaje(String m){
        Mensaje msj = new Mensaje(m, Mensaje.COD);
        setChanged();
        notifyObservers(msj);
    }

    public void setPolaca(List l) {
        this.polaca = l;
    }
     
}
*/